import {getUserTempId,saveUserToken2Local,getUserTokenFromLocal,deleteUserTokenInLocal} from '@/utils/auth'
import {reqLogin,reqUserInfo,reqLogout} from '@/api'
import { Toast } from 'vant';

//该文件是专门保存用户相关数据的
const actions = {
	//用户登录的action，（以后只要想登录，就得联系这个userLogin）
	async userLogin(miniStore,loginParams){
		// 发请求去登录
		let result = await reqLogin(loginParams)
		if(result.code === 200){
			//若登录成功，保存用户的token，到vuex的state中
			miniStore.commit('SAVE_USER_TOKEN',result.data.token)
			//再将用户的token保存到localStorage里一份
			saveUserToken2Local(result.data.token)
			return 'ok' //随便返回一个字符串，表示登录成功了
		}else{
			//返回一个失败状态的Promise实例，表示登录失败了
			return Promise.reject(result.message)
		}
	},
	//获取用户信息的action
	async getUserInfo(miniStore){
		//发请求获取用户信息，无需参数，因为token已经在请求头里携带了
		let result = await reqUserInfo()
		if(result.code === 200){
			//若请求成功
			miniStore.commit('SAVE_USER_INFO',result.data)
			return 'ok'
		}else{
			//提示错误信息
			Toast.fail(result.message)
			return Promise.reject(result.message)
		}
	},
	//用户退出登录的action
	async userLogout(miniStore){
		//发起退出登录请求
		let result = await reqLogout()
		//判断退出登录是否成功
		if(result.code === 200){
			//退出成功了
			//清空vuex中的userToken、userInfo
			miniStore.commit('CLEAR_USER')
			//清空local中的userToken
			deleteUserTokenInLocal()
			return 'ok'
		}else{
			//退出失败（对于我们的尚品汇服务器来说，几乎不存在退出登录失败）
			Toast.fail(result.message)
			return Promise.reject(result.message)
		}
	}
}

const mutations = {
	SAVE_USER_TOKEN(state,token){
		state.userToken = token
	},
	SAVE_USER_INFO(state,info){
		state.userInfo = info
	},
	CLEAR_USER(state){
		state.userInfo = {}
		state.userToken = ''
	}
}

const state = {
	userTempId:getUserTempId(),
	userToken:getUserTokenFromLocal(),
	userInfo:{}
}

const getters = {}

export default {
	actions,
	mutations,
	state,
	getters,
}
